home *** CD-ROM | disk | FTP | other *** search
/ Clickx 96 / Clickx 96.iso / software / tools / tool / xbmc-10.1.exe / addons / script.rss.editor / resources / lib / setEditor.py < prev    next >
Encoding:
Python Source  |  2011-03-08  |  6.5 KB  |  162 lines

  1. import xbmc
  2. import xbmcgui
  3. import os, sys
  4. from xmlParser import XMLParser
  5.  
  6. #enable localization
  7. getLS   = sys.modules[ "__main__" ].__language__
  8. __cwd__ = sys.modules[ "__main__" ].__cwd__
  9.  
  10.  
  11. class GUI(xbmcgui.WindowXMLDialog):
  12.  
  13.     def __init__(self, *args, **kwargs):
  14.         xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
  15.         self.setNum = kwargs['setNum']
  16.         self.parser = XMLParser()
  17.         if self.parser.feedsTree:
  18.             self.doModal()
  19.  
  20.  
  21.     def onInit(self):
  22.         self.defineControls()
  23.         if not self.parser.feedsList:
  24.             xbmcgui.Dialog().ok(getLS(40)+'RssFeeds.xml', 'RssFeeds.xml '+getLS(41), getLS(42), getLS(43))
  25.             self.closeDialog()
  26.         self.showDialog()
  27.  
  28.     def defineControls(self):
  29.         #actions
  30.         self.action_cancel_dialog = (9, 10)
  31.         #control ids
  32.         self.control_heading_label_id       = 2
  33.         self.control_list_label_id          = 3
  34.         self.control_list_id                = 10
  35.         self.control_modifySet_button_id    = 11
  36.         self.control_add_button_id          = 13
  37.         self.control_remove_button_id       = 14
  38.         self.control_ok_button_id           = 18
  39.         self.control_cancel_button_id       = 19
  40.         #controls
  41.         self.heading_label      = self.getControl(self.control_heading_label_id)
  42.         self.list_label         = self.getControl(self.control_list_label_id)
  43.         self.list               = self.getControl(self.control_list_id)
  44.         self.add_button         = self.getControl(self.control_add_button_id)
  45.         self.remove_button      = self.getControl(self.control_remove_button_id)
  46.         self.modifySet_button   = self.getControl(self.control_modifySet_button_id)
  47.         self.ok_button          = self.getControl(self.control_ok_button_id)
  48.         self.cancel_button      = self.getControl(self.control_cancel_button_id)
  49.         #defaults
  50.         self.dFeedsList = [{'url':'http://feeds.feedburner.com/xbmc', 'updateinterval':'30'}]
  51.  
  52.     def showDialog(self):
  53.         self.heading_label.setLabel(getLS(30))
  54.         self.list_label.setLabel(getLS(24))
  55.         self.modifySet_button.setLabel(getLS(6))
  56.         self.updateSetsList()
  57.  
  58.     def closeDialog(self):
  59.         """Close the Set Editor Dialog and open RSS Editor Dialog"""
  60.         import rssEditor
  61.         rssEditorUI = rssEditor.GUI("script-RSS_Editor-rssEditor.xml", __cwd__, "default", setNum = self.setNum)
  62.         self.close()
  63.         del rssEditorUI
  64.  
  65.     def onClick(self, controlId):
  66.         #select existing set
  67.         if controlId == self.control_list_id:
  68.             setItem = self.list.getSelectedItem()
  69.             self.setNum = setItem.getLabel()
  70.             self.parser.writeXmlToFile()
  71.             self.closeDialog()
  72.         #add new set
  73.         elif controlId == self.control_add_button_id:
  74.             self.getNewSet()
  75.             self.updateSetsList()
  76.         #remove existing set
  77.         elif controlId == self.control_remove_button_id:
  78.             self.removeSet()
  79.             self.updateSetsList()
  80.         #modify existing set
  81.         elif controlId == self.control_modifySet_button_id:
  82.             self.editSet()
  83.             self.updateSetsList()
  84.         #write sets to file/dialog to modify feeds within set.
  85.         elif controlId == self.control_ok_button_id:
  86.             self.parser.writeXmlToFile()
  87.             self.closeDialog()
  88.         #cancel dialog
  89.         elif controlId == self.control_cancel_button_id:
  90.             self.closeDialog()
  91.  
  92.     def onAction(self, action):
  93.         if action in self.action_cancel_dialog:
  94.             self.closeDialog()
  95.  
  96.     def onFocus(self, controlId):
  97.         pass
  98.  
  99.     def editSet(self):
  100.         """Edit the attributes of an existing set"""
  101.         setItem = self.list.getSelectedItem()
  102.         oldSetLabel = setItem.getLabel()
  103.         #ask user for set number
  104.         newSetNum = self.getSetNum(oldSetLabel[3:])
  105.         if newSetNum:
  106.             newSetLabel = 'set'+newSetNum
  107.             #ask user if set contains right to left text
  108.             rtl = self.containsRTLText()
  109.             #copy settings from old label
  110.             self.parser.feedsList[newSetLabel] = self.parser.feedsList[oldSetLabel]
  111.             #apply new attributes
  112.             self.parser.feedsList[newSetLabel]['attrs'] = {'rtl':rtl, 'id':newSetNum}
  113.             #if the set# changes, remove the old one.
  114.             if newSetLabel != oldSetLabel:
  115.                 self.removeSet(oldSetLabel)
  116.  
  117.     def getNewSet(self):
  118.         """Add a new set with some default values"""
  119.         #default setNumber = find highest numbered set, then add 1
  120.         defaultSetNum = max([int(setNum[3:]) for setNum in self.parser.feedsList.keys()])+1
  121.         #ask user for set number
  122.         newSetNum = self.getSetNum(defaultSetNum)
  123.         #check if set number already exists
  124.         if newSetNum:
  125.             newSetLabel = 'set'+newSetNum
  126.             #ask user if set contains right to left text
  127.             rtl = self.containsRTLText()
  128.             #add default information
  129.             self.parser.feedsList[newSetLabel] = {'feedslist':self.dFeedsList, 'attrs':{'rtl':rtl, 'id':newSetNum}}
  130.  
  131.     def getSetNum(self, defaultSetNum, title = getLS(25)):
  132.         newSetNum = str(xbmcgui.Dialog().numeric(0, title, str(defaultSetNum)))
  133.         if self.setNumExists(newSetNum) and newSetNum != defaultSetNum:
  134.             self.getSetNum(defaultSetNum, getLS(50) % newSetNum)
  135.         else:
  136.             return newSetNum
  137.  
  138.     def setNumExists(self, setNum):
  139.         if 'set'+setNum in self.parser.feedsList.keys():
  140.             return True
  141.  
  142.     def containsRTLText(self):
  143.         """Returns xml style lowercase 'true' or 'false'"""
  144.         return str(bool(xbmcgui.Dialog().yesno(getLS(27), getLS(27)))).lower()
  145.  
  146.     def removeSet(self, setNum = None):
  147.         """Removes a set or if set is required resets it to default"""
  148.         if setNum is None:
  149.             setNum = self.list.getSelectedItem().getLabel()
  150.         if setNum == 'set1':
  151.             #Ask if user wants to set everything to default.
  152.             if xbmcgui.Dialog().yesno(getLS(45), getLS(46), getLS(47)):
  153.                 self.parser.feedsList[setNum] = {'feedslist':self.dFeedsList, 'attrs':{'rtl':'false','id':'1'}}
  154.         else:
  155.             del self.parser.feedsList[setNum]
  156.  
  157.     def updateSetsList(self):
  158.         self.list.reset()
  159.         for setNum in sorted(self.parser.feedsList.keys()):
  160.             self.list.addItem(setNum)
  161.             self.list_label.setLabel(getLS(24))
  162.